package com.atguigu.keyword;

public class TestStudent {
    public static void main(String[] args) {
        Student s1 = new Student("张三",99);
        Student s2 = new Student("张三",99);

        System.out.println(s1 == s2);//false
        //因为Student是类，s1,s2是引用数据类型的变量
        //s1,s2中就存储的是对象的首地址
        //两次new的对象地址值肯定不一样的

        System.out.println(s1.equals(s2));//true
        //如果Student类没有重写equals方法，那么s1.equals(s2)等价于 s1==s2

        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());
        /*
        Java中规定：
        (1)两个相等的对象，它们的hashCode（哈希值）一定相同
        A：==相等（绝对相同，地址都一样，物理上就是同一个对象
        B：equals相等（相对相同，里面的属性值相同）
        (2)如果两个对象的hashCode（哈希值）不同，那么它们一定不相等
        (3)如果两个对象的hashCode（哈希值）相同，那么它们可能相等，可能不同
            可能存在两个不同的人，身份证号码一样

            因为hashCode也是根据某个公式算出来一个int值
            y=f(x)，两个不同的x，可能得到相同的y
         */

        String str1 = "Aa";
        String str2 = "BB";
        System.out.println(str1.equals(str2));//false
        System.out.println(str1.hashCode());//2112
        System.out.println(str2.hashCode());//2112
        /*
        到目前为止哈希值对于我们来说，还没有什么意义。
        等到咱们哈希结构的集合等容器时，才有意义，例如：HashSet、HashMap
         */
    }
}
